"use client"; import { getRank, getRankDetail, Rank, RankDetail, RankItem, RankRequestParams, RankReward, } from "@/api/activity"; import { userInfoApi } from "@/api/login"; import CustomButton from "@/components/CustomButton"; import HeaderBack from "@/components/HeaderBack"; import Tabs from "@/components/Tabs"; import { HeaderImageMap, RankSourceMap } from "@/enums"; import { useRouter } from "@/i18n/routing"; import { cryptoStr } from "@/utils"; import { useRequest } from "ahooks"; import { InfiniteScroll } from "antd-mobile"; import clsx from "clsx"; import Image from "next/image"; import React from "react"; import styles from "./page.module.scss"; const Page = () => { const { data: userInfo, run: refreshUserInfo } = useRequest(userInfoApi, { pollingErrorRetryCount: 1, }); const router = useRouter(); const [initLoading, setInitLoading] = React.useState(true); const [areaId, setAreaId] = React.useState(1); const [loading, setLoading] = React.useState(false); const [data, setData] = React.useState({} as RankDetail); const [noMore, setNoMore] = React.useState(false); const [rankList, setRankList] = React.useState([]); const [rankData, setRankData] = React.useState([]); const [currentSource, setCurrentSource] = React.useState({ source: 1, type: 1, }); // source 来源(1现金投注2现金+彩金投注3免费币投注4重玩币投注5现金充值6邀请玩家) // type 榜单类型(0小时榜1日榜单2周榜单3月榜) const pageInfo = React.useRef({ page: 0, }); const SourceObject = React.useMemo(() => { if (!rankData?.length) return []; const source: any = {}; rankData?.forEach((item) => { if (!source[item.source]) { source[item.source] = {}; } source[item.source][item.type] = item; }); return source; }, [rankData]); const Tab1Cfg = React.useMemo(() => { if (!SourceObject) return []; const result: any = []; Object.keys(SourceObject).forEach((key) => { const curSource = RankSourceMap.get(Number(key)) || ({} as any); result.push({ id: key, name: (
{curSource.text}
), }); }); return result; }, [SourceObject]); const Tab2Cfg = React.useMemo(() => { if (!SourceObject[currentSource.source]) return []; const result: any = []; Object.keys(SourceObject[currentSource.source]).forEach((key) => { const curType = RankSourceMap.get(Number(key)) || ({} as any); result.push({ id: key, name: (
DIA
01:01:01
), }); }); return result; }, [SourceObject, currentSource]); const getRankData = async () => { const res = await getRank(); if (res.code === 200) { setRankData(res?.data || []); } }; React.useEffect(() => { getRankData(); }, []); React.useEffect(() => { pageInfo.current.page = 0; setRankList([]); setData({} as any); // getData(areaId); }, [areaId]); const getData = async (id: number) => { if (loading) return; try { setLoading(true); if (pageInfo.current?.page === 1) { setInitLoading(true); } const params: RankRequestParams = { area_id: id, type: 0, page: pageInfo.current?.page || 1, }; const res = await getRankDetail(params); if (res?.code === 200) { setData(res.data); if (!res?.data?.list || (res?.data?.list && res?.data?.list?.length < 10)) { setNoMore(true); } setRankList((value) => { return [...(value || []), ...(res?.data?.list || [])]; }); } } finally { setLoading(false); setInitLoading(false); } }; const getNumber = (num: number) => { if (num > 3) return num; return ; }; const sourceChange = (actKey: any, key: any) => { setCurrentSource((state: any) => ({ ...state, [key]: actKey })); }; return (
Ranking
} />
sourceChange(val, "source")} >
Daily Contest
Contest prize pool
R$ {data?.total || 0}
2025-07-30 00:00 ~ 2025-07-31 00:00
{"avatar"}
{cryptoStr(data?.self_rank?.nickName)}
Apostas: 0
Aposte
Meu ranking
Fora do ranking
Prêmio
{data?.self_rank?.reward && data.self_rank.reward[0] ? data.self_rank.reward[0].amount : 0}{" "} ( {data?.self_rank?.reward && data.self_rank.reward[0] ? data.self_rank.reward[0].ratio : 0} %)

Aposte para subir no ranking

router.push("/rank/history")} > Prêmio histórico router.push("/rank/rules")} > Regras
Rank
Jogador
Apostas
Prêmio
{!!rankList?.length && rankList.map((item) => { let curReward: RankReward = {} as RankReward; if (item?.reward?.length) { curReward = item?.reward[0]; } return (
{getNumber(item.rank)}
{cryptoStr(item?.nickName)}
{item.score}
R${curReward?.amount || 0} ({curReward?.ratio || 0}%)
); })} { pageInfo.current.page++; await getData(areaId); }} >
); }; export default Page;